package infb.modelo;

import infb.dao.EspecialidadesInterfaz;
import infb.dao.MedicosInterfaz;
import java.io.Serializable;
import java.util.Date;
import javax.naming.NamingException;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.naming.Context;
import javax.naming.InitialContext;


@Entity
@Table(name = "MEDICOS")
@NamedQueries({@NamedQuery(name = "Medicos.findAll", query = "SELECT m FROM Medicos m"), @NamedQuery(name = "Medicos.findByDni", query = "SELECT m FROM Medicos m WHERE m.dni = :dni"), @NamedQuery(name = "Medicos.findByNumColegiado", query = "SELECT m FROM Medicos m WHERE m.numColegiado = :numColegiado"), @NamedQuery(name = "Medicos.findByNombre", query = "SELECT m FROM Medicos m WHERE m.nombre = :nombre"), @NamedQuery(name = "Medicos.findByApellido1", query = "SELECT m FROM Medicos m WHERE m.apellido1 = :apellido1"), @NamedQuery(name = "Medicos.findByApellido2", query = "SELECT m FROM Medicos m WHERE m.apellido2 = :apellido2"), @NamedQuery(name = "Medicos.findByFoto", query = "SELECT m FROM Medicos m WHERE m.foto = :foto"), @NamedQuery(name = "Medicos.findByTelefono", query = "SELECT m FROM Medicos m WHERE m.telefono = :telefono"), @NamedQuery(name = "Medicos.findByMail", query = "SELECT m FROM Medicos m WHERE m.mail = :mail"), @NamedQuery(name = "Medicos.findByFechaIncorporacion", query = "SELECT m FROM Medicos m WHERE m.fechaIncorporacion = :fechaIncorporacion"), @NamedQuery(name = "Medicos.findByDireccion", query = "SELECT m FROM Medicos m WHERE m.direccion = :direccion"), @NamedQuery(name = "Medicos.findByPassword", query = "SELECT m FROM Medicos m WHERE m.password = :password"), @NamedQuery(name = "Medicos.findByHoraInicioConsulta", query = "SELECT m FROM Medicos m WHERE m.horaInicioConsulta = :horaInicioConsulta"), @NamedQuery(name = "Medicos.findByHoraFinConsulta", query = "SELECT m FROM Medicos m WHERE m.horaFinConsulta = :horaFinConsulta")})
public class Medicos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "DNI")
    private String dni;
    @Basic(optional = false)
    @Column(name = "NUM_COLEGIADO")
    private String numColegiado;
    @Basic(optional = false)
    @Column(name = "NOMBRE")
    private String nombre;
    @Basic(optional = false)
    @Column(name = "APELLIDO1")
    private String apellido1;
    @Column(name = "APELLIDO2")
    private String apellido2;
    @Column(name = "FOTO")
    private String foto;
    @Column(name = "TELEFONO")
    private String telefono;
    @Column(name = "MAIL")
    private String mail;
    @Column(name = "FECHA_INCORPORACION")
    @Temporal(TemporalType.DATE)
    private Date fechaIncorporacion;
    @Column(name = "DIRECCION")
    private String direccion;
    @Basic(optional = false)
    @Column(name = "PASSWORD")
    private String password;
    @Column(name = "HORA_INICIO_CONSULTA")
    private Short horaInicioConsulta;
    @Column(name = "HORA_FIN_CONSULTA")
    private Short horaFinConsulta;


    @JoinColumn(name = "ESPECIALIDAD", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Especialidades especialidad;

    public Medicos() {
    }

    public Medicos(String dni) {
        this.dni = dni;
    }


    public Medicos(String dni, String numColegiado, String nombre, String apellido1, String apellido2, String foto,String telefono,String mail,Date fecha_incorporacion, String direccion, String password,String especialidad,Short hora_inicio_consulta,Short hora_fin_consulta) throws NamingException {

        this.dni = dni;
        this.numColegiado = numColegiado;
        this.nombre = nombre;
        this.apellido1 = apellido1;
        this.apellido2 = apellido2;
        this.foto=foto;
        this.telefono=telefono;
        this.mail=mail;
        this.fechaIncorporacion=fecha_incorporacion;
        this.direccion = direccion;
        this.password = password;
        this.horaInicioConsulta=hora_inicio_consulta;
        this.horaFinConsulta=hora_fin_consulta;

        Context contexto = new InitialContext();
        EspecialidadesInterfaz especialidadInterfaz = (EspecialidadesInterfaz) contexto.lookup("EspecialidadesEJB");        
        this.especialidad = especialidadInterfaz.buscarEspecialidadporNombre(especialidad);
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNumColegiado() {
        return numColegiado;
    }

    public void setNumColegiado(String numColegiado) {
        this.numColegiado = numColegiado;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido1() {
        return apellido1;
    }

    public void setApellido1(String apellido1) {
        this.apellido1 = apellido1;
    }

    public String getApellido2() {
        return apellido2;
    }

    public void setApellido2(String apellido2) {
        this.apellido2 = apellido2;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public Date getFechaIncorporacion() {
        return fechaIncorporacion;
    }

    public void setFechaIncorporacion(Date fechaIncorporacion) {
        this.fechaIncorporacion = fechaIncorporacion;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Short getHoraInicioConsulta() {
        return horaInicioConsulta;
    }

    public void setHoraInicioConsulta(Short horaInicioConsulta) {
        this.horaInicioConsulta = horaInicioConsulta;
    }

    public Short getHoraFinConsulta() {
        return horaFinConsulta;
    }

    public void setHoraFinConsulta(Short horaFinConsulta) {
        this.horaFinConsulta = horaFinConsulta;
    }

    public Especialidades getEspecialidad() {
        return especialidad;
    }

    public void setEspecialidad(Especialidades especialidad) {
        this.especialidad = especialidad;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (dni != null ? dni.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Medicos)) {
            return false;
        }
        Medicos other = (Medicos) object;
        if ((this.dni == null && other.dni != null) || (this.dni != null && !this.dni.equals(other.dni))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "infb.modelo.Medicos[dni=" + dni + "]";
    }

}
